#ifndef PSEUDOCOLORALGORITHM_H
#define PSEUDOCOLORALGORITHM_H

#include "ImageProcessingAlgorithmBase.h"
#include <QImage>
#include <QString>

/**
 * @brief 基于热图风格的伪彩色映射算法类
 * 该类将灰度图像转换为伪彩色图像，通过线性映射生成红-绿-蓝三通道伪彩色值
 */
class PseudoColorAlgorithm : public ImageProcessingAlgorithmBase {
    Q_OBJECT
    Q_INTERFACES(ImageProcessingAlgorithmBase)
    Q_PLUGIN_METADATA(IID IMAGEPROCESSINGALGORITHMBASE_IID)
public:
    Q_INVOKABLE PseudoColorAlgorithm(QObject *parent = nullptr);
    ~PseudoColorAlgorithm() override;

    /**
     * @brief 设置输入图像
     * @param imageId 图像唯一标识符
     * @param inputImage 输入的原始图像（支持任意格式，内部会转换为灰度图）
     */
    void setInputImage(const QString &imageId, const QImage &inputImage) override;

    /**
     * @brief 执行图像处理
     * 处理结果将通过imageProcessed信号输出
     * @param parameters 处理参数字符串，每个参数之间使用,隔开
     */
    void processImage(const QString& parameters = "") override;

    /**
     * @brief 获取当前处理的图像ID
     * @return 图像ID
     */
    QString currentImageId() const override;

    QString algorithmName() const override;
    // 初始化算法
    void initialize() override;

    /**
     * @brief 获取算法处理参数
     * @return 包含处理参数的QVariantMap
     */
    QVariantMap getProcessParameters() const override;

    /**
     * @brief 设置算法处理参数
     * @param params 包含处理参数的QVariantMap
     */
    void setProcessParameters(const QVariantMap &params) override;
    
    /**
     * @brief 恢复默认参数
     * 将算法的所有参数恢复到默认设置
     */
    void resetToDefaultParameters() override;

private:
    // 存储输入图像
    QImage m_inputImage;

    // 当前处理的图像ID
    QString m_imageId;

    // 处理状态标志
    bool m_processed;
};

#endif // PSEUDOCOLORALGORITHM_H
